package implement

// Set 是一个简单的集合结构，使用 map 实现
type Set struct {
	data map[interface{}]struct{}
}

// NewSet 创建一个新的空集合
func NewSet() *Set {
	return &Set{
		data: make(map[interface{}]struct{}),
	}
}

// Add 向集合中添加元素
func (s *Set) Add(element interface{}) {
	s.data[element] = struct{}{}
}

// Remove 从集合中删除元素
func (s *Set) Remove(element interface{}) {
	delete(s.data, element)
}

// Contains 检查元素是否在集合中
func (s *Set) Contains(element interface{}) bool {
	_, exists := s.data[element]
	return exists
}

// Size 返回集合的大小
func (s *Set) Size() int {
	return len(s.data)
}

// Clear 清空集合
func (s *Set) Clear() {
	s.data = make(map[interface{}]struct{})
}

// IsEmpty 检查集合是否为空
func (s *Set) IsEmpty() bool {
	return len(s.data) == 0
}

// GetAll 返回集合中的所有元素
func (s *Set) GetAll() []interface{} {
	elements := make([]interface{}, 0, len(s.data))
	for key := range s.data {
		elements = append(elements, key)
	}
	return elements
}
